﻿// 2485. [二维滑窗,dp动态规划] 造房子.中等
// https://oj.rnd.huawei.com/problems/2485/details
// 困难, 没做出来
//帮助这个可怜人找到最大的正方形地皮。
//输入 第一行为两个整数n,m表示这个土地的长宽。
//接下来n行，每行m个整数，用空格隔开，0表示该块土地被破坏，1表示该块土地完好。
//输出 一个整数，最大正方形的边长。
//输入 4 4
// 0 1 1 1
// 1 1 1 0
// 0 1 1 0
// 1 1 0 1
//输出 2

#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>
using namespace std;

//#define DEBUG
#ifdef DEBUG
#define PF(...) printf(__VA_ARGS__)
#else
#define PF(...)
#endif

// typedef pair<int,int> Position;
struct Position {
  int x = 0, y = 0;
};

int getMaxRect(const vector<vector<int> >& vvLand) {
  // 1. RB右移,找1
  // 2. LT右移,找1
  // 3. 完整方块,保存
  // 4. 有缺,左
  //

  return 0;
}

int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  vector<vector<int> > vvLand;
  for (int i = 0; i < n; i++) {
    vector<int> vtLd;
    for (int j = 0; j < m; j++) {
      int tmp = 0;
      scanf("%d", &tmp);
      vtLd.push_back(tmp);
    }
    vvLand.push_back(vtLd);
  }

  PF("\n");
  for (auto vtLand : vvLand) {
    for (auto la : vtLand) {
      PF("%d ", la);
    }
    PF("\n");
  }

  int num = getMaxRect(vvLand);
  printf("%d\n", num);

  return 0;
}
